def climb_stairs(n):
    """
    计算爬n阶楼梯的方法数，每次可爬1或2阶。
    
    Args:
        n: 阶梯的数量
        
    Returns:
        int: 方法数
    """
    if n <= 0:
        return 0
    # 初始化动态规划数组，dp[i]表示爬到第i阶的方法数
    dp = [0] * (n + 1)
    dp[0] = 1  # 0阶有1种方法（起点）
    dp[1] = 1  # 1阶有1种方法（直接爬1阶）
    # 从第2阶开始计算
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

if __name__ == "__main__":
    # 测试示例
    print(f"爬5阶楼梯的方法数: {climb_stairs(5)}")  # 输出: 8
    print(f"爬4阶楼梯的方法数: {climb_stairs(4)}")  # 输出: 5